from django.db import models
from django.utils import timezone
from django.contrib.auth.models import AbstractUser


class UserInfo(models.Model):
    """
    存储用户基本信息的模型，包含用户 ID、用户名、密码等相关信息。
    """
    # 移除 user_id 字段，AbstractUser 已有自增主键 id
    #user_id = models.AutoField(primary_key=True)
    # 用户名，最大长度 150 位，要求唯一，AbstractUser 已有 username 字段
    #username = models.CharField(max_length=150, unique=True)
    # 密码字段，AbstractUser 已有 password 字段
    #password = models.CharField(max_length=128)
    # 昵称，最大长度 50 位，可为空
    nickname = models.CharField(max_length=50, blank=True, null=True)
    # 注册 IP，最大长度 45 位（IPv6 最大长度），可为空
    register_ip = models.GenericIPAddressField(protocol='both', unpack_ipv4=True, blank=True, null=True)
    # 注册时间，默认为当前时间
    register_time = models.DateTimeField(default=timezone.now, editable=False)
    # 账户权限，整数类型，默认为 0
    account_permission = models.IntegerField(default=0)
    # 账户状态，整数类型，默认为 0 表示正常
    account_status = models.IntegerField(default=0)

    def __str__(self):
        """
        返回用户名，方便在管理界面等地方显示。
        """
        return self.username


class LoginInfo(models.Model):
    """
    存储用户登录信息的模型，包含主键 ID、关联的用户信息、会话 ID、登录时间和过期时间。
    """
    # 主键 ID，自动递增，Django 默认会添加自增主键 id
    #id = models.AutoField(primary_key=True)
    # 关联 UserInfo 模型，使用外键关联，当关联的 UserInfo 记录删除时，此记录也删除
    user_info = models.ForeignKey(UserInfo, on_delete=models.CASCADE, related_name='login_info')
    # 会话 SID，最大长度 255 位，唯一标识一个会话
    session_sid = models.CharField(max_length=255, unique=True)
    # 登录时间，默认为当前时间
    login_time = models.DateTimeField(default=timezone.now, editable=False)
    # 过期时间，可为空
    expire_time = models.DateTimeField(blank=True, null=True)

    def __str__(self):
        """
        返回关联用户的用户名和会话 SID，方便在管理界面等地方显示。
        """
        return f"{self.user_info.username} - {self.session_sid}"
